package jvm.VMExecSubsystem;

/**
 * 为了多次载入执行类而加入的加载器
 * 把defineClass方法开放出来，只有外部显式调用的时候才会使用到loadByte方法
 * 由虚拟机调用时，仍然按照原有的双亲委派规则使用loadClass方法进行类加载
 *
 * @author msi
 */
public class HotSwapClassLoader extends ClassLoader {

    public HotSwapClassLoader() {
        super(HotSwapClassLoader.class.getClassLoader());
    }

    public Class loadByte(byte[] classByte) {
        return defineClass(null, classByte, 0, classByte.length);
    }

}

/**
 *HotSwapClassLoader 所做的事情仅仅是公开父类 ClassLoader中的protected defineClass 方法。我们将会使用这个方法把提交执行的java类的byte[]数组转变为Class对象， HotSwapClassLoader中并没有重写loadClass和findClass方法
 * 这个类加载器的类查找范围与它的父类加载器完全是一致的。在被虚拟机调用时，它会按照双亲委派模型工作。
 */